package model;

import java.util.ArrayList;
import java.util.Observable;

import model.lugares.Ciudad;
import model.lugares.LaCiudadNoEstaDisponibleException;
import model.lugares.Edificio;

public class ModeloObsrvable extends Observable {
	
	private Partida partida;
	
	public ModeloObsrvable() {
		partida = new Partida();
	}
	
	//TODOS LOS GETTERS A LOS QUE PUEDEN ACCEDER LAS VISTAS
	public String getPoliciaNombre(){
		return partida.policia.getNombre();
	}
	
	public String getNombreDelObjetoRobado(){
		return partida.policia.getCaso().getLadron().getObjetoRobado().nombre;
	}
	
	public String getSexoLadron(){
		return partida.policia.getCaso().getLadron().getSexo().toString();
	}
	
	public String getPoliciaDia(){
		return partida.policia.tiempo.getDia().toString();
	}
	
	public int getPoliciaHora(){
		return partida.policia.tiempo.getHora();
	}
	
	public String getPoliciaHoraComoString(){
		Integer horaDelJuego=partida.policia.tiempo.getHora();
		return (horaDelJuego.toString()+":00");
	}
	
	public String getPoliciaGrado(){
		return partida.policia.obtenerGradoPoliciaComoString();
	}
	
	public int getPoliciaCantidadDeArrestos(){
		return partida.policia.getCantidadArrestos();
	}
	
	public String getPoliciaCiudadActual(){
		return partida.policia.ciudadActual().getNombre();
	}
	
	public String getPoliciaDescripcionCiudadActual(){
		return partida.policia.ciudadActual().descripcion;
	}
	
	public Ciudad getPoliciaPaisenMapa1(){
		Ciudad d =  partida.policia.mapa().obtenerPosiblesDestinos().get(0);
		return d;
	}	
	
	public Ciudad getPoliciaPaisenMapa2(){
		Ciudad d =  partida.policia.mapa().obtenerPosiblesDestinos().get(1);
		return d;
	}	
	
	public Ciudad getPoliciaPaisenMapa3(){
		Ciudad d =  partida.policia.mapa().obtenerPosiblesDestinos().get(2);
		return d;
	}	
	
	public Ciudad getPoliciaPaisenMapa4(){
		Ciudad d =  partida.policia.mapa().obtenerPosiblesDestinos().get(3);
		return d;
	}
	

	
	public String[] getLadronesSospechosos(){
		return partida.policia.getLadronesSospechosos();
	}
	
	/*public boolean elLadronSeEncuentraEnLaCiudad(){
		return (partida.policia.ciudadActual().getEdificios().get(Ciudad.INDEX_E_MONEDA).equals("Todas las personas consultadas hablan de una persona muy sospechosa en la ciudad."));
	}
	*/

	public String getNombreDelLadron() {
		return partida.policia.getCaso().getLadron().getNombre();
	}
	
	public boolean elCasoEstaGanado(){
		return partida.policia.elCasoEstaGanado();
	}
	
	public boolean elCasoEstaPerdido(){
		return partida.policia.elCasoEstaPerdido();
	}
	
	public boolean quedaTiempo(){
		return partida.policia.verificarSiQuedaTiempo();
	}
	
	public ArrayList<Edificio> getEdificiosDeCiudadActualDePolicia()
	{
		return partida.policia.ciudadActual().getEdificios();
	}
	
	
	//TODAS LAS ACCIONES QUE PUEDEN REALIZAR LOS CONTROLADORES
	
	public void cargarPoliciaPorNombre(String nombre){
		partida.cargarPoliciaPorNombre(nombre.toUpperCase());
	}
	
	public void nuevoCaso(){
		partida.policia.asignarseCaso();
		//setChanged();
	}
	
	public void viajar(String ciudad){
		Ciudad laCiudad = null;
		for (Ciudad c :partida.policia.mapa().obtenerPosiblesDestinos()){
			if (ciudad.compareTo(c.getNombre()+", "+c.getNombrePais())==0)
				laCiudad = c;
		}
		try {
			partida.policia.viajar(laCiudad);
		} catch (LaCiudadNoEstaDisponibleException e) {
			e.printStackTrace();
		}
		setChanged();
	}
	
	public void filtrarLadronesSospechosos(String sexo,String cabello,String hobby,String senia,String vehiculo){
		//System.out.println("Filtro"+sexo+", "+cabello+", "+hobby+", "+senia+", "+vehiculo+"\n\r");
		partida.policia.filtrarLadronesSospechosos(sexo, cabello, hobby, senia, vehiculo);
		setChanged();
	}
	
	/*public String entrarEdificioMoneda(){
		String pista = partida.policia.entrarEdificioMoneda();
		setChanged();
		return pista;
	}
	
	public String entrarEdificioTransporte(){
		String pista = partida.policia.entrarEdificioTransporte();
		setChanged();
		return pista;
	}
	
	public String entrarEdificioPublico(){
		String pista = partida.policia.entrarEdificioPublico();
		setChanged();
		return pista;
	}*/
	
	public String salirDelEdificioActual(){
		setChanged();
		return partida.policia.salirDeEdificio();
	}
	
	public void emitirOrdenDeArresto(String string) {
		partida.policia.emitirOrdenDeArresto(string);
		setChanged();
	}
	
	
	
	public void guardarPolicia(){
		partida.guardarArrestosAPoliciaEnXML(partida.policia);
	}
	
	public String policiaIngresaAEdificio(Edificio destino){
		String pistaObtenida=partida.policia.entrarEdificio(destino);
		setChanged();
		
		
		return pistaObtenida;
		
	}
	
}

